﻿Imports System.Data.SqlClient
Imports Control_Vuelos_BE

Public Class Movimiento_PersonalADO
    ReadOnly MiConexion As New ConexionADO()
    ReadOnly cnx As New SqlConnection(MiConexion.GetCnx)
    ReadOnly cmd As New SqlCommand()
    ReadOnly vReservaADO As New V_ReservaADO()
    ReadOnly vReservaBE As New V_ReservaBE()
    ReadOnly mPasajeroADO As New PasajeroADO()
    ReadOnly mPasajeroBE As New M_PasajeroBE()
    ReadOnly DManifiestoBE As New D_ManifiestoBE()

    Public Function pr_ActualizarMovimientoPersonal(ByVal p_MovimientoPersonalBE As MovimientoPersonalBE) As Boolean
        Const sInstruccion As String = "Update dbo.Movimiento_Personal SET DiasTranscurridos=@DiasTranscurridos,EstMovimiento=@EstMovimiento,DiasAFavor=@DiasAFavor,FchRetorno=@FchRetorno, " & _
                                       " ObsMovimiento=@ObsMovimiento,FlgRetorno=@FlgRetorno,CodLugarDestino=@CodLugarDestino,DiasEnContra=@DiasEnContra,DiasNoConsiderado=@DiasNoConsiderado, " & _
                                       " DiasBase=@DiasBase, GozarCalculado=@GozarCalculado,GozarRedondeado=@GozarRedondeado,SaldoDias=@SaldoDias, DiasAdicionales=@DiasAdicionales, TotDiaCalculados = @TotDiaCalculados, TotDiaAutorizados=@TotDiaAutorizados, " & _
                                       " DiasPendientes=@DiasPendientes, RetProgramado = @RetProgramado, RetReal=@RetReal, DiasAFavorRet=@DiasAFavorRet,DiasEnContraRet=@DiasEnContraRet, MotExceso=@MotExceso, FacExceso=@FacExceso, " & _
                                       " DiasAFavorSalida=@DiasAFavorSalida,DiasEnContraSalida=@DiasEnContraSalida,CodRegimen=@CodRegimen,CodReservaRetorno=@CodReservaRetorno WHERE CodMovimiento = @CodMovimiento"
        Dim oTran As SqlTransaction
        Try
            Dim cn As New SqlConnection(MiConexion.GetCnx)
            Using cn
                Dim cmd As New SqlCommand(sInstruccion, cn)
                Using cmd
                    cn.Open()
                    oTran = cn.BeginTransaction(Data.IsolationLevel.Serializable)
                    cmd.Parameters.AddWithValue("@CodMovimiento", p_MovimientoPersonalBE.CodMovimiento)
                    cmd.Parameters.AddWithValue("@DiasTranscurridos", p_MovimientoPersonalBE.DiasTranscurridos)
                    cmd.Parameters.AddWithValue("@EstMovimiento", p_MovimientoPersonalBE.EstMovimiento)
                    cmd.Parameters.AddWithValue("@DiasAFavor", p_MovimientoPersonalBE.DiasAFavor)
                    cmd.Parameters.AddWithValue("@FchRetorno", IIf(p_MovimientoPersonalBE.FchRetorno Is String.Empty, DBNull.Value, p_MovimientoPersonalBE.FchRetorno))
                    cmd.Parameters.AddWithValue("@ObsMovimiento", p_MovimientoPersonalBE.ObsMovimiento)
                    cmd.Parameters.AddWithValue("@FlgRetorno", p_MovimientoPersonalBE.FlgRetorno)
                    cmd.Parameters.AddWithValue("@CodLugarDestino", p_MovimientoPersonalBE.CodLugarDestino)
                    cmd.Parameters.AddWithValue("@DiasEnContra", p_MovimientoPersonalBE.DiasEnContra)
                    cmd.Parameters.AddWithValue("@DiasNoConsiderado", p_MovimientoPersonalBE.DiasNoConsiderado)
                    cmd.Parameters.AddWithValue("@DiasBase", p_MovimientoPersonalBE.DiasBase)
                    cmd.Parameters.AddWithValue("@GozarCalculado", p_MovimientoPersonalBE.GozarCalculado)
                    cmd.Parameters.AddWithValue("@GozarRedondeado", p_MovimientoPersonalBE.GozarRedondeado)
                    cmd.Parameters.AddWithValue("@SaldoDias", p_MovimientoPersonalBE.SaldoDias)
                    cmd.Parameters.AddWithValue("@DiasAdicionales", p_MovimientoPersonalBE.DiasAdicionales)
                    cmd.Parameters.AddWithValue("@TotDiaCalculados", p_MovimientoPersonalBE.TotDiaCalculados)
                    cmd.Parameters.AddWithValue("@TotDiaAutorizados", p_MovimientoPersonalBE.TotDiaAutorizados)
                    cmd.Parameters.AddWithValue("@DiasPendientes", p_MovimientoPersonalBE.DiasPendientes)
                    cmd.Parameters.AddWithValue("@RetProgramado", IIf(p_MovimientoPersonalBE.RetProgramado Is String.Empty, DBNull.Value, p_MovimientoPersonalBE.RetProgramado))
                    cmd.Parameters.AddWithValue("@RetReal", IIf(p_MovimientoPersonalBE.RetReal Is String.Empty, DBNull.Value, p_MovimientoPersonalBE.RetReal))
                    cmd.Parameters.AddWithValue("@DiasAFavorRet", p_MovimientoPersonalBE.DiasAFavorRet)
                    cmd.Parameters.AddWithValue("@DiasEnContraRet", p_MovimientoPersonalBE.DiasEnContraRet)
                    cmd.Parameters.AddWithValue("@MotExceso", p_MovimientoPersonalBE.MotExceso)
                    cmd.Parameters.AddWithValue("@FacExceso", p_MovimientoPersonalBE.FacExceso)
                    cmd.Parameters.AddWithValue("@DiasAFavorSalida", p_MovimientoPersonalBE.DiasAFavorSalida)
                    cmd.Parameters.AddWithValue("@DiasEnContraSalida", p_MovimientoPersonalBE.DiasEnContraSalida)
                    cmd.Parameters.AddWithValue("@CodRegimen", p_MovimientoPersonalBE.CodRegimen)
                    cmd.Parameters.AddWithValue("@CodReservaRetorno", p_MovimientoPersonalBE.CodReservaRetorno)
                    cmd.Transaction = oTran
                    Try
                        cmd.ExecuteNonQuery()
                        oTran.Commit()
                        Return True
                    Catch ex As Exception
                        oTran.Rollback()
                        MsgBox("Movimiento_PersonalADO (pr_ActualizarMovimientoPersonal) --> " & ex.Message, MsgBoxStyle.Critical)
                        Return False
                    End Try                    
                End Using
            End Using
        Catch ex As Exception
            MsgBox("Movimiento_PersonalADO (pr_ActualizarMovimientoPersonal) --> " & ex.Message, MsgBoxStyle.Critical)
            Return False
        End Try
    End Function

    Public Function pr_GrabarCheckInPasajeros(ByVal p_DTManifiesto As DataTable, ByVal p_CodViaje As String, ByVal scodusr As String) As Boolean
        Const sInstruccion As String = "Update dbo.C_Manifiesto SET EstadoManifiesto = '2' WHERE CodViaje = @CodViaje"
        Const sInstruccion2 As String = "Update dbo.V_ProgramaViaje SET EstadoViaje = '3' WHERE CodViaje = @CodViaje"
        Dim nCR As Integer = 0
        Dim oTran As SqlTransaction
        Dim dsDetalle As DataTable = p_DTManifiesto
        Try
            Dim cn As New SqlConnection(MiConexion.GetCnx)
            Using cn
                Dim cmd As New SqlCommand(sInstruccion, cn)
                Using cmd
                    cn.Open()
                    oTran = cn.BeginTransaction(Data.IsolationLevel.Serializable)
                    ' Actualizo el estado del manifiesto
                    cmd.Parameters.AddWithValue("@CodViaje", p_CodViaje)
                    cmd.Transaction = oTran
                    cmd.ExecuteNonQuery()
                    Dim cmdDet As SqlCommand
                    Dim cmdDMa As SqlCommand
                    Dim cmdVuelo As SqlCommand
                    Dim cmdUManifiesto As SqlCommand
                    Dim cmdUReserva As SqlCommand
                    Dim cmdUPMovPer As SqlCommand
                    Dim sInstDetalle As String
                    Dim sUpdDManifiesto As String
                    Dim sUpdReserva As String
                    Dim nCodPasajero As Integer = 0
                    'Actualizo el estado vuelo
                    cmdVuelo = New SqlCommand(sInstruccion2, cn)
                    cmdVuelo.Parameters.AddWithValue("@CodViaje", p_CodViaje)
                    cmdVuelo.Transaction = oTran
                    cmdVuelo.ExecuteNonQuery()
                    'Verifico los checking de
                    Dim I As Integer
                    For I = 0 To dsDetalle.Rows.Count - 1
                        ' cargo las entidades del pasajero
                        nCodPasajero = mPasajeroADO.pr_TraerCodigo(dsDetalle.Rows(I).Item("NroDocumentoId"))
                        ' si el DNI no existe 
                        If nCodPasajero = 0 Then
                            ' creo al pasajero
                            mPasajeroADO.pr_CrearPasajero(mPasajeroBE)
                            ' cargo el codigo asignado al pasajero segun el DNI
                            nCodPasajero = mPasajeroADO.pr_TraerCodigo(dsDetalle.Rows(I).Item("NroDocumentoId"))
                        End If
                        mPasajeroBE.CodPasajero = nCodPasajero
                        mPasajeroBE.NroDocumentoId = dsDetalle.Rows(I).Item("NroDocumentoId")
                        mPasajeroBE.AppPasajero = dsDetalle.Rows(I).Item("AppPasajero")
                        mPasajeroBE.ApmPasajero = dsDetalle.Rows(I).Item("ApmPasajero")
                        mPasajeroBE.NomPasajero = dsDetalle.Rows(I).Item("NomPasajero")
                        mPasajeroBE.NacionalidadPasajero = dsDetalle.Rows(I).Item("NacionalidadPasajero")
                        mPasajeroBE.TlfPasajero = dsDetalle.Rows(I).Item("TlfPasajero")
                        mPasajeroBE.RpcPasajero = dsDetalle.Rows(I).Item("RpcPasajero")
                        mPasajeroBE.MailPasajero = dsDetalle.Rows(I).Item("MailPasajero")
                        mPasajeroBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                        mPasajeroBE.CodLugarResidencia = dsDetalle.Rows(I).Item("CodLugarResidencia")

                        ' cargo las entidades de la reserva
                        vReservaBE.FchReserva = dsDetalle.Rows(I).Item("FchViaje")
                        vReservaBE.TipPasajero = dsDetalle.Rows(I).Item("TipPasajero")
                        vReservaBE.NomContacto = dsDetalle.Rows(I).Item("NomContacto")
                        vReservaBE.FchViaje = dsDetalle.Rows(I).Item("FchViaje")
                        vReservaBE.PsoPasajero = dsDetalle.Rows(I).Item("PsoPasajero")
                        vReservaBE.NroPrioridad = dsDetalle.Rows(I).Item("NroPrioridad")
                        vReservaBE.MotivoViaje = "998" ' Pasajero abordo en el Aeropuerto
                        vReservaBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                        vReservaBE.CodComunidad = ""
                        vReservaBE.CodCentroCosto = dsDetalle.Rows(I).Item("CodCentroCosto")
                        vReservaBE.PsoEquipajePasajero = dsDetalle.Rows(I).Item("PsoEquipajePasajero")
                        vReservaBE.EstadoReserva = "4"   ' Arribado
                        vReservaBE.FlgRequisitos = False
                        vReservaBE.FchRetorno = dsDetalle.Rows(I).Item("FchRetorno")
                        vReservaBE.FlgPermiso = False
                        vReservaBE.CodPasajero = nCodPasajero
                        vReservaBE.CodLugarReserva = dsDetalle.Rows(I).Item("CodLugarOrigen")
                        vReservaBE.NroBoleta = ""
                        vReservaBE.ObsReserva = "Pasajero reservado desde un manifiesto con cierre parcial "
                        vReservaBE.PctCentroCosto = dsDetalle.Rows(I).Item("PctCentroCosto")
                        vReservaBE.CodCentroCosto2 = dsDetalle.Rows(I).Item("CodCentroCosto2")
                        vReservaBE.FlgSctrSalud = False
                        vReservaBE.FchSctrSalud = DateTime.Now
                        vReservaBE.FlgSctrPension = False
                        vReservaBE.FchSctrPension = DateTime.Now
                        vReservaBE.FlgExamenAltitud = False
                        vReservaBE.FchExamenAltitud = DateTime.Now
                        vReservaBE.FlgAsumeMarsa = False
                        vReservaBE.FlgPrestamo = False
                        vReservaBE.FlgResRetorno = False
                        vReservaBE.FlgNew = False
                        vReservaBE.FlgResPasajero = False
                        vReservaBE.CodCreadopor = scodusr
                        vReservaBE.FchCreado = DateTime.Now
                        vReservaBE.CodModificadopor = scodusr
                        vReservaBE.FchModificado = DateTime.Now
                        ' si no hay excepcion no pasa nada
                        If IsDBNull(dsDetalle.Rows(I).Item("TipPorExcepcion")) Then

                        Else
                            ' 1 = Adicionado al vuelo
                            If (dsDetalle.Rows(I).Item("TipPorExcepcion") = "1") Then
                                ' agrego la reserva del pasajero agregado fuera del manifiesto
                                If vReservaADO.pr_CrearReserva(vReservaBE) Then
                                    'Traemos el codigo de reserva
                                    nCR = vReservaADO.pr_RecuperarReservaPorDNI(dsDetalle.Rows(I).Item("NroDocumentoId"), Format(dsDetalle.Rows(I).Item("FchViaje"), "dd/MM/yyyy"))
                                    DManifiestoBE.CodReserva = nCR
                                    DManifiestoBE.NroDocumentoId = dsDetalle.Rows(I).Item("NroDocumentoId")
                                    DManifiestoBE.CodViaje = dsDetalle.Rows(I).Item("CodViaje")
                                    DManifiestoBE.FlgResponsable = False
                                    DManifiestoBE.NomPasajero = dsDetalle.Rows(I).Item("NomPasajero")
                                    DManifiestoBE.NacionalidadPasajero = "Peruana"
                                    DManifiestoBE.ApmPasajero = dsDetalle.Rows(I).Item("ApmPasajero")
                                    DManifiestoBE.ObsManifiesto = dsDetalle.Rows(I).Item("ObsManifiesto")
                                    DManifiestoBE.AppPasajero = dsDetalle.Rows(I).Item("AppPasajero")
                                    DManifiestoBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                                    DManifiestoBE.CodCentroCosto = dsDetalle.Rows(I).Item("CodCentroCosto")
                                    DManifiestoBE.CodCentroCosto2 = ""
                                    DManifiestoBE.PctCentroCosto = 100
                                    DManifiestoBE.FlgLock = True
                                    Dim sInstD_Manifiesto As String
                                    sInstD_Manifiesto = "Insert Into dbo.D_Manifiesto (CodViaje,CodReserva,NroDocumentoId,FlgResponsable,NacionalidadPasajero,NomPasajero,AppPasajero,ApmPasajero,ObsManifiesto,CodAnalisis,CodCentroCosto,PctCentroCosto,FlgLock,TipPorExcepcion,FlgChecking) " & _
                                                        " Values (@CodViaje,@CodReserva,@NroDocumentoId,@FlgResponsable,@NacionalidadPasajero,@NomPasajero,@AppPasajero,@ApmPasajero,@ObsManifiesto,@CodAnalisis,@CodCentroCosto,@PctCentroCosto,@FlgLock,@TipPorExcepcion,@FlgChecking)"
                                    cmdDMa = New SqlCommand(sInstD_Manifiesto, cn)
                                    cmdDMa.Parameters.AddWithValue("@CodViaje", dsDetalle.Rows(I).Item("CodViaje"))
                                    cmdDMa.Parameters.AddWithValue("@CodReserva", nCR)
                                    cmdDMa.Parameters.AddWithValue("@NroDocumentoId", dsDetalle.Rows(I).Item("NroDocumentoId"))
                                    cmdDMa.Parameters.AddWithValue("@FlgResponsable", False)
                                    cmdDMa.Parameters.AddWithValue("@NacionalidadPasajero", "Peruana")
                                    cmdDMa.Parameters.AddWithValue("@NomPasajero", dsDetalle.Rows(I).Item("NomPasajero"))
                                    cmdDMa.Parameters.AddWithValue("@AppPasajero", dsDetalle.Rows(I).Item("AppPasajero"))
                                    cmdDMa.Parameters.AddWithValue("@ApmPasajero", dsDetalle.Rows(I).Item("ApmPasajero"))
                                    cmdDMa.Parameters.AddWithValue("@ObsManifiesto", dsDetalle.Rows(I).Item("ObsManifiesto"))
                                    cmdDMa.Parameters.AddWithValue("@CodAnalisis", dsDetalle.Rows(I).Item("CodAnalisis"))
                                    cmdDMa.Parameters.AddWithValue("@CodCentroCosto", dsDetalle.Rows(I).Item("CodCentroCosto"))
                                    cmdDMa.Parameters.AddWithValue("@PctCentroCosto", 100)
                                    cmdDMa.Parameters.AddWithValue("@FlgLock", True)
                                    cmdDMa.Parameters.AddWithValue("@FlgChecking", dsDetalle.Rows(I).Item("FlgChecking"))
                                    cmdDMa.Parameters.AddWithValue("@TipPorExcepcion", dsDetalle.Rows(I).Item("TipPorExcepcion").ToString)
                                    cmdDMa.Transaction = oTran
                                    cmdDMa.ExecuteNonQuery()
                                End If
                            End If
                        End If
                        ' verifico si se desea generar reserva de retorno
                        Dim lRetorno As Boolean = False
                        Dim dFchRetorno As Date
                        If Not IsDBNull(dsDetalle.Rows(I).Item("FlgResRetorno")) And Not IsDBNull(dsDetalle.Rows(I).Item("FchRetorno")) Then
                            lRetorno = dsDetalle.Rows(I).Item("FlgResRetorno")
                            If lRetorno = True Then
                                dFchRetorno = dsDetalle.Rows(I).Item("FchRetorno")
                                vReservaBE.FchReserva = dFchRetorno
                                vReservaBE.FchViaje = dFchRetorno
                                vReservaBE.FchRetorno = dFchRetorno
                                vReservaBE.ObsReserva = "Reserva automática de retorno"
                                vReservaBE.EstadoReserva = "2"
                                vReservaADO.pr_CrearReserva(vReservaBE)
                            End If
                        End If
                        Const sUpdMovPer As String = "UPDATE dbo.Movimiento_Personal SET EstMovimiento = 'I' WHERE NroDocumentoId = @NroDocumentoId  AND EstMovimiento='A'"
                        cmdUPMovPer = New SqlCommand(sUpdMovPer, cn)
                        cmdUPMovPer.Parameters.AddWithValue("@NroDocumentoId", dsDetalle.Rows(I).Item("NroDocumentoId"))
                        cmdUPMovPer.Transaction = oTran
                        cmdUPMovPer.ExecuteNonQuery()
                        sInstDetalle = "Insert Into dbo.Movimiento_Personal (CodViaje,CodReserva,NroDocumentoId,FchViaje,EstMovimiento)" & _
                                       " Values (@CodViaje,@CodReserva,@NroDocumentoId,@FchViaje,@EstMovimiento) "
                        cmdDet = New SqlCommand(sInstDetalle, cn)
                        cmdDet.Parameters.AddWithValue("@CodViaje", dsDetalle.Rows(I).Item("CodViaje"))
                        cmdDet.Parameters.AddWithValue("@CodReserva", IIf(dsDetalle.Rows(I).Item("TipPorExcepcion").ToString = "1", nCR, dsDetalle.Rows(I).Item("CodReserva")))
                        cmdDet.Parameters.AddWithValue("@NroDocumentoId", dsDetalle.Rows(I).Item("NroDocumentoId"))
                        cmdDet.Parameters.AddWithValue("@FchViaje", dsDetalle.Rows(I).Item("FchViaje"))
                        cmdDet.Parameters.AddWithValue("@EstMovimiento", "A")
                        cmdDet.Transaction = oTran
                        cmdDet.ExecuteNonQuery()
                        sUpdDManifiesto = "Update dbo.D_Manifiesto SET FlgChecking = @FlgChecking , TipPorExcepcion = @TipPorExcepcion , ObsManifiesto = @ObsManifiesto WHERE CodViaje = @CodViaje AND CodReserva = @CodReserva "
                        cmdUManifiesto = New SqlCommand(sUpdDManifiesto, cn)
                        cmdUManifiesto.Parameters.AddWithValue("@CodViaje", dsDetalle.Rows(I).Item("CodViaje"))
                        cmdUManifiesto.Parameters.AddWithValue("@CodReserva", dsDetalle.Rows(I).Item("CodReserva"))
                        cmdUManifiesto.Parameters.AddWithValue("@FlgChecking", dsDetalle.Rows(I).Item("FlgChecking"))
                        cmdUManifiesto.Parameters.AddWithValue("@TipPorExcepcion", dsDetalle.Rows(I).Item("TipPorExcepcion").ToString)
                        cmdUManifiesto.Parameters.AddWithValue("@ObsManifiesto", dsDetalle.Rows(I).Item("ObsManifiesto"))
                        cmdUManifiesto.Transaction = oTran
                        cmdUManifiesto.ExecuteNonQuery()
                        sUpdReserva = "Update dbo.V_Reserva SET EstadoReserva = '4' WHERE CodReserva = @CodReserva"
                        If lRetorno = True Then
                            sUpdReserva = "Update dbo.V_Reserva SET FlgResRetorno = @FlgResRetorno, FchRetorno = @FchRetorno, EstadoReserva = '4' WHERE CodReserva = @CodReserva"
                        End If
                        cmdUReserva = New SqlCommand(sUpdReserva, cn)
                        cmdUReserva.Parameters.AddWithValue("@CodReserva", dsDetalle.Rows(I).Item("CodReserva"))
                        If lRetorno = True Then
                            cmdUReserva.Parameters.AddWithValue("@FlgResRetorno", lRetorno)
                            cmdUReserva.Parameters.AddWithValue("@FchRetorno", dFchRetorno)
                        End If
                        cmdUReserva.Transaction = oTran
                        cmdUReserva.ExecuteNonQuery()
                    Next
                    oTran.Commit()
                    Return True
                End Using
            End Using
        Catch myException As Exception
            MsgBox("Movimiento_PersonalADO (pr_GrabarCheckInPasajeros) --> " & myException.Message, MsgBoxStyle.Critical)
            Return False
        End Try
    End Function

    Public Function pr_MovimientoPersonal(ByVal p_CodUser As String) As DataTable
        Using dts As New DataSet()
            Dim ada As SqlDataAdapter
            Try
                cmd.Connection = cnx
                cmd.CommandType = CommandType.StoredProcedure
                cmd.CommandText = "pr_MovimientoPersonal"
                cmd.Parameters.Clear()
                cmd.Parameters.Add(New SqlParameter("@p_CodUser", SqlDbType.Char, 20))
                cmd.Parameters("@p_CodUser").Value = p_CodUser
                ada = New SqlDataAdapter(cmd)
                ada.Fill(dts, "MovPer")
                Return dts.Tables("MovPer")
            Catch ex As Exception
                Throw New Exception(ex.Message)
            End Try
        End Using
    End Function

    Public Function pr_RecuperarFlagRetorno(ByVal CodMovimiento As Integer) As Boolean
        Dim _FlgRetorno As Boolean
        Dim cn As New SqlConnection(MiConexion.GetCnx)
        Using cn
            cn.Open()
            Try
                Const sInstruccion As String = "SELECT ISNULL(FlgRetorno,0) as FlgRetorno FROM dbo.Movimiento_Personal WHERE CodMovimiento=@CodMovimiento"
                Dim cmd2 As New SqlCommand(sInstruccion, cn)
                cmd2.Parameters.AddWithValue("@CodMovimiento", CodMovimiento)
                cmd2.CommandType = CommandType.Text
                _FlgRetorno = cmd2.ExecuteScalar()
                Return _FlgRetorno
            Catch myException As Exception
                MsgBox("Movimiento_PersonalADO (pr_RecuperarFlagRetorno) --> " & myException.Message, MsgBoxStyle.Critical)
                Return False
            End Try
        End Using
    End Function

    Public Function pr_BuscarMovimiento(ByVal p_CodReservaRetorno As Integer) As Boolean

        Dim _Int As Integer
        Dim cn As New SqlConnection(MiConexion.GetCnx)
        Using cn
            cn.Open()
            Try
                Const sInstruccion As String = "SELECT COUNT(*) as encontro FROM dbo.Movimiento_Personal WHERE CodReservaRetorno=@CodReservaRetorno"
                Dim cmd2 As New SqlCommand(sInstruccion, cn)
                cmd2.Parameters.AddWithValue("@CodReservaRetorno", p_CodReservaRetorno)
                cmd2.CommandType = CommandType.Text
                _Int = cmd2.ExecuteScalar()
                Return _Int
            Catch myException As Exception
                MsgBox("Movimiento_PersonalADO (pr_BuscarMovimiento) --> " & myException.Message, MsgBoxStyle.Critical)
                Return False
            End Try
        End Using
    End Function

    Public Function pr_RecalcularMovimiento(ByVal p_MovimientoPersonalBE As MovimientoPersonalBE, ByVal p_Regimen As Decimal) As Boolean
        Dim oFchRetorno As DateTime = Convert.ToDateTime(p_MovimientoPersonalBE.FchRetorno)
        Dim oFechaLlegada As DateTime = Convert.ToDateTime(p_MovimientoPersonalBE.FchViaje)
        Dim nDias As Integer
        nDias = DateDiff(DateInterval.Day, oFechaLlegada, oFchRetorno) + 1
        p_MovimientoPersonalBE.DiasTranscurridos = Convert.ToDecimal(nDias)
        Dim nBase As Decimal = p_MovimientoPersonalBE.DiasTranscurridos + p_MovimientoPersonalBE.DiasAFavor - p_MovimientoPersonalBE.DiasEnContra - p_MovimientoPersonalBE.DiasNoConsiderado
        p_MovimientoPersonalBE.DiasBase = nBase
        p_MovimientoPersonalBE.GozarCalculado = nBase / p_Regimen
        p_MovimientoPersonalBE.GozarRedondeado = Math.Round(nBase / p_Regimen, 0)
        p_MovimientoPersonalBE.SaldoDias = (nBase / p_Regimen) - Math.Round(nBase / p_Regimen, 0)
        p_MovimientoPersonalBE.TotDiaCalculados = Math.Round(nBase / p_Regimen, 0) + p_MovimientoPersonalBE.DiasAdicionales
        p_MovimientoPersonalBE.DiasPendientes = (Math.Round(nBase / p_Regimen, 0) + p_MovimientoPersonalBE.DiasAdicionales) - p_MovimientoPersonalBE.TotDiaAutorizados
        Dim oRetProgramado As DateTime = oFchRetorno.AddDays(p_MovimientoPersonalBE.TotDiaAutorizados)
        p_MovimientoPersonalBE.RetProgramado = oRetProgramado
        Dim oRetReal As DateTime = Convert.ToDateTime(p_MovimientoPersonalBE.RetReal)
        Dim nDiasAFavor As Integer = DateDiff(DateInterval.Day, oRetReal, oRetProgramado)
        If nDiasAFavor >= 0 Then
            p_MovimientoPersonalBE.DiasAFavorRet = nDiasAFavor
        Else
            p_MovimientoPersonalBE.DiasAFavorRet = 0
        End If
        Dim nDiasEnContra As Integer = DateDiff(DateInterval.Day, oRetProgramado, oRetReal) + p_MovimientoPersonalBE.DiasPendientes
        If nDiasEnContra >= 0 Then
            p_MovimientoPersonalBE.DiasEnContraRet = nDiasEnContra
        Else
            p_MovimientoPersonalBE.DiasEnContraRet = 0
        End If
        If nDiasAFavor > 0 Then
            p_MovimientoPersonalBE.DiasAFavorSalida = nDiasAFavor + p_MovimientoPersonalBE.DiasPendientes
        End If
        If p_MovimientoPersonalBE.FacExceso > 0 Then
            p_MovimientoPersonalBE.DiasEnContraSalida = (p_MovimientoPersonalBE.DiasEnContraRet * p_MovimientoPersonalBE.FacExceso) - p_MovimientoPersonalBE.DiasPendientes
        End If
        If pr_ActualizarMovimientoPersonal(p_MovimientoPersonalBE) Then
            Return True
        Else
            Return False
        End If
    End Function


    Public Function pr_RecuperarMovimiento(ByVal p_CodMovimiento As Integer) As MovimientoPersonalBE
        Dim dtr As SqlDataReader
        Dim _pBE As New MovimientoPersonalBE
        Try
            cmd.Connection = cnx
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "pr_TraerMovimientoPersonal"
            cmd.Parameters.Add(New SqlParameter("@pnCodMovimiento", SqlDbType.Int))
            cmd.Parameters("@pnCodMovimiento").Value = p_CodMovimiento
            cnx.Open()
            dtr = cmd.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                With _pBE
                    .CodLugarDestino = dtr("CodLugarDestino")
                    .CodMovimiento = dtr("CodMovimiento")
                    .CodRegimen = dtr("CodRegimen")
                    .CodReserva = dtr("CodReserva")
                    .CodReservaRetorno = dtr("CodReservaRetorno")
                    .CodViaje = dtr("CodViaje")
                    .DiasAdicionales = dtr("DiasAdicionales")
                    .DiasAFavor = dtr("DiasAFavor")
                    .DiasAFavorRet = dtr("DiasAFavorRet")
                    .DiasAFavorSalida = dtr("DiasAFavorSalida")
                    .DiasBase = dtr("DiasBase")
                    .DiasEnContra = dtr("DiasEnContra")
                    .DiasEnContraRet = dtr("DiasEnContraRet")
                    .DiasEnContraSalida = dtr("DiasEnContraSalida")
                    .DiasNoConsiderado = dtr("DiasNoConsiderado")
                    .DiasPendientes = dtr("DiasPendientes")
                    .DiasTranscurridos = dtr("DiasTranscurridos")
                    .EstMovimiento = dtr("EstMovimiento")
                    .FacExceso = dtr("FacExceso")
                    .FchRetorno = dtr("FchRetorno")
                    .FchViaje = dtr("FchViaje")
                    .FlgRetorno = dtr("FlgRetorno")
                    .GozarRedondeado = dtr("GozarRedondeado")
                    .GozarCalculado = dtr("GozarCalculado")
                    .MotExceso = dtr("MotExceso")
                    .NroDocumentoId = dtr("NroDocumentoId")
                    .ObsMovimiento = dtr("ObsMovimiento")
                    .RetProgramado = dtr("RetProgramado")
                    .RetReal = dtr("RetReal")
                    .SaldoDias = dtr("SaldoDias")
                    .TotDiaAutorizados = dtr("TotDiaAutorizados")
                    .TotDiaCalculados = dtr("TotDiaCalculados")
                End With
            End If
        Catch x As SqlException
            MsgBox("Movimiento_PersonalADO (pr_TraerMovimientoPersonal) --> " & x.Message, MsgBoxStyle.Critical)
        Finally
            If cnx.State = ConnectionState.Open Then
                cnx.Close()
            End If
            cmd.Parameters.Clear()
        End Try
        Return _pBE
    End Function

End Class